package com.cskaoyan.javase.oop1._8call;

/**
 * 结论：
 *      1.Java只有值传递
 *      2.Java当中的方法可以改变对象的状态（成员变量的取值）但是无法直接交换两个引用（无法改变局部变量）
 *
 *
 * @since 11:22
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s1 = new Student(18);
        Student s2 = new Student(81);
        // 方法可以改变对象的状态(改变成员变量的取值),可以交换成功
        /*swapStudentAge(s1, s2);
        System.out.println(s1.age);
        System.out.println(s2.age);*/

        // 方法不可能改变其他方法内部的局部变量,所以交换失败
        System.out.println("交换之前的s1" + s1);
        System.out.println("交换之前的s2" + s2);
        swapStudentReference(s1, s2);
        System.out.println("交换之后的s1" + s1);
        System.out.println("交换之后的s2" + s2);

    }

    public static void swapStudentReference(Student s1, Student s2) {
        Student temp = s1;
        s1 = s2;
        s2 = temp;
        System.out.println("交换方法内部的s1" + s1);
        System.out.println("交换方法内部的s2" + s2);
    }

    public static void swapStudentAge(Student s1, Student s2) {
        int temp = s1.age;
        s1.age = s2.age;
        s2.age = temp;
    }
}

class Student {
    int age;

    public Student(int age) {
        this.age = age;
    }
}
